package com.digicom.service.interaction;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.digicom.common.entity.Comment;
import com.digicom.common.entity.Interaction;
import lombok.Data;

import java.util.List;

/**
 * 文章互动服务接口
 */
public interface InteractionService extends IService<Interaction> {

    /**
     * 点赞文章
     * @param userId 用户ID
     * @param articleId 文章ID
     * @param clientType 客户端类型
     * @return 是否点赞成功
     */
    boolean likeArticle(Long userId, Long articleId, String clientType);

    /**
     * 取消点赞
     * @param userId 用户ID
     * @param articleId 文章ID
     * @return 是否取消成功
     */
    boolean cancelLike(Long userId, Long articleId);

    /**
     * 收藏文章
     * @param userId 用户ID
     * @param articleId 文章ID
     * @param clientType 客户端类型
     * @return 是否收藏成功
     */
    boolean collectArticle(Long userId, Long articleId, String clientType);

    /**
     * 取消收藏
     * @param userId 用户ID
     * @param articleId 文章ID
     * @return 是否取消成功
     */
    boolean cancelCollect(Long userId, Long articleId);

    /**
     * 分享文章
     * @param userId 用户ID
     * @param articleId 文章ID
     * @param clientType 客户端类型
     * @return 是否分享成功
     */
    boolean shareArticle(Long userId, Long articleId, String clientType);

    /**
     * 获取用户点赞的文章列表
     * @param userId 用户ID
     * @param page 分页参数
     * @return 分页数据
     */
    Page<Interaction> listUserLiked(Long userId, Page<Interaction> page);

    /**
     * 获取用户收藏的文章列表
     * @param userId 用户ID
     * @param page 分页参数
     * @return 分页数据
     */
    Page<Interaction> listUserCollected(Long userId, Page<Interaction> page);

    /**
     * 检查用户是否点赞文章
     * @param userId 用户ID
     * @param articleId 文章ID
     * @return 是否已点赞
     */
    boolean checkUserLiked(Long userId, Long articleId);

    /**
     * 检查用户是否收藏文章
     * @param userId 用户ID
     * @param articleId 文章ID
     * @return 是否已收藏
     */
    boolean checkUserCollected(Long userId, Long articleId);

    /**
     * 获取文章互动统计数据
     * @param articleId 文章ID
     * @return 互动统计数据
     */
    InteractionStatistic getArticleInteractionStats(Long articleId);

    /**
     * 互动统计数据对象
     */
    @Data
    class InteractionStatistic {
        // 点赞数
        private Integer likeCount;
        // 收藏数
        private Integer collectCount;
        // 分享数
        private Integer shareCount;
        // 评论数
        private Integer commentCount;
    }
} 